/**
 * @description 用户信息模块
 * @author wyvonj
 * @date 2019-08-05
 */
import { Webim } from '@/utils/types';

declare const webim: Webim;

import { Commit } from 'vuex';

// sdkAppID
export const sdkAppID: string = '1400232339';

export const identifier: string = 'testuser2';
// export const identifier: string = 'testuser1';

// userSig
export const userSig: string = 'eJwtzE8LgjAcxvH3snPIz*kUhQ4e7JBhQiF0LDfrVzTnnH8ieu-J9Ph8Hvh*yflwcgahSUyoA2RjN3IhDdZo2YjO9J3QdD07-roqhZzErg9APep50fKISaEWszPGKAAsavBtLWBB5LPQXSt4n9tlWgxctn34VA2V*TjstCoe5ZgfP5XJ2iaBfXXJbjKZ0i35-QFdJzR-';

// 0 表示独立模式
export const accountMode: number = 0;

const state: any = {
  loginInfo: {
    'sdkAppID': sdkAppID, //用户所属应用id,必填
    // 'accountType': accountType, //用户所属应用帐号类型, 已废弃
    'identifier': '', //当前用户ID,必须是否字符串类型，必填
    'userSig': userSig,
    //当前用户身份凭证，必须是字符串类型，必填
    'identifierNick': null, //当前用户昵称，不用填写，登录接口会返回用户的昵称，如果没有设置，则返回用户的id
    'headurl': 'img/me.jpg' //当前用户默认头像，选填，如果设置过头像，则可以通过拉取个人资料接口来得到头像信息
  },
  selType: webim.SESSION_TYPE.GROUP,
  selToID: null, //当前选中聊天id（当聊天类型为私聊时，该值为好友帐号，否则为群号）
  selSess: {}, //当前聊天会话对象
  recentSessMap:{}, //保存最近会话列表
  reqRecentSessCount: 50, //每次请求的最近会话条数，业务可以自定义
  isPeerRead: 1,  //是否需要支持APP端已读回执的功能,默认为0。是：1，否：0。
  friendHeadUrl: 'img/friend.jpg', // 用于没有设置过头像的好友
  groupHeadUrl: 'img/friend.jpg', // 用于没有设置过群头像的好友
  maxNameLen: 12, // 我的好友或群组列表中名称显示最大长度，仅demo用得到
  reqMsgCount: 15, // 每次请求的历史消息(c2c获取群)条数，仅demo用得到
  curPlayAudio: null, //当前正在播放的audio对象
  getPrePageC2CHistroyMsgInfoMap: {}, //保留下一次拉取好友历史消息的信息
  getPrePageGroupHistroyMsgInfoMap: {}, //保留下一次拉取群历史消息的信息
  groupMembers: [],
  currentUser: {}, // 当前选择的group
  userInfo: {}, // 本用户信息
  memberInfo: {}, // 本用户信息
};

const mutations: any = {
  saveLoginInfo(states: any, params: object) {
    let newInfo = Object.assign(states.loginInfo, params);
    states.loginInfo = newInfo;
  },
  saveSelToID(states: any, params: object) {
    states.selToID = params;
  },
  saveSelSess(states: any, params: object) {
    states.selSess = params;
  },
  saveCurrentUser(states: any, params: object) {
    states.currentUser = params;
  },
  saveGroupMembers(states: any, params: object) {
    states.groupMembers = params;
  },
  saveMemberInfo(states: any, params: object) {
    states.memberInfo = params;
  },
  saveUserInfo(states: any, params: object) {
    let newInfo = Object.assign(states.userInfo, params);
    states.userInfo = newInfo;
  },
};

const actions: any = {
  saveLoginInfoFN(context: { commit: Commit }, params: object) {
    context.commit('saveLoginInfo', params);
  },
  saveSelToIDFN(context: { commit: Commit }, params: object) {
    context.commit('saveSelToID', params);
  },
  saveSelSessFN(context: { commit: Commit }, params: object) {
    context.commit('saveSelSess', params);
  },
  saveCurrentUserFN(context: { commit: Commit }, params: object) {
    context.commit('saveCurrentUser', params);
  },
  saveGroupMembersFN(context: { commit: Commit }, params: object) {
    context.commit('saveGroupMembers', params);
  },
  saveUserInfoFN(context: { commit: Commit }, params: object) {
    context.commit('saveUserInfo', params);
  },
  saveMemberInfoFN(context: { commit: Commit }, params: object) {
    context.commit('saveMemberInfo', params);
  },
};

export default {
  namespaced: true, // namespaced为false的时候，state,mutations,actions全局可以调用，为true，生成作用域，引用时要声明模块名称
  state,
  mutations,
  actions,
};